جزوه · فصل دوم · جلسه ۲۲ · ساختار فایل‌های باینری ← بازگشت به فهرست
📘 فصل دوم · جلسه ۲۲ ساختار فایل‌های باینری
📅 تاریخ: سه‌شنبه، ۲۰ مرداد ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian · 📦 Red Hat

▍ مقدمه

در این جلسه با ساختار فایل‌های باینری در لینوکس آشنا می‌شویم و تفاوت‌های بین خانواده دبیان و خانواده رد هت را بررسی می‌کنیم.

🔑 باینری (Binary) چیست؟

باینری یا فایل اجرایی، فایلی است که مستقیماً توسط CPU و سیستم‌عامل قابل اجرا است. این فایل‌ها از کد منبع (Source Code) با استفاده از کامپایلر (Compiler) تولید می‌شوند و شامل دستورات ماشین هستند.

▍ ساختار یک فایل باینری

فایل‌های باینری در لینوکس معمولاً از چند بخش اصلی تشکیل شده‌اند:

📌 مثال:

برای مشاهده اطلاعات یک فایل باینری از دستور file استفاده کنید:

┌──(ya3in㉿kali)-[~] └─$ file /bin/ls /bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=..., for GNU/Linux 3.2.0, stripped

توضیح: این خروجی نشان می‌دهد که ls یک فایل ELF (Executable and Linkable Format) با معماری ۶۴ بیت و به صورت داینامیک لینک است.

▍ تفاوت فایل‌های باینری در دبیان و رد هت

🔵 دبیان (Debian)

  • فرمت بسته: .deb
  • ساختار: آرشیو ar شامل سه فایل: debian-binary، control.tar.gz، data.tar.gz
  • مدیر بسته: apt / dpkg
  • مسیر نصب پیش‌فرض: /usr/bin/ یا /usr/local/bin/
  • کتابخانه‌ها: .so (Shared Objects) در /usr/lib/

🔴 رد هت (Red Hat)

  • فرمت بسته: .rpm
  • ساختار: شامل هدر، امضا و آرشیو cpio
  • مدیر بسته: dnf / yum
  • مسیر نصب پیش‌فرض: /usr/bin/ یا /usr/local/bin/
  • کتابخانه‌ها: .so (Shared Objects) در /usr/lib64/

• مقایسه دقیق‌تر

ویژگی دبیان (Debian) رد هت (Red Hat)
فرمت بسته .deb .rpm
ابزار نصب dpkg rpm
مدیر بسته سطح بالا apt dnf / yum
ساختار بسته آرشیو ar با فایل‌های tar.gz آرشیو cpio با هدر و امضا
مسیر کتابخانه‌ها /usr/lib/ /usr/lib64/ (برای ۶۴ بیت)
فایل کانفیگ /etc/apt/sources.list /etc/yum.repos.d/

▍ مشاهده اطلاعات باینری

• دستور file

نوع فایل و اطلاعات اولیه را نمایش می‌دهد.

┌──(ya3in㉿kali)-[~] └─$ file /usr/bin/tmux /usr/bin/tmux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=..., stripped

• دستور ldd

وابستگی‌های کتابخانه‌ای (Shared Libraries) یک فایل باینری را نمایش می‌دهد.

┌──(ya3in㉿kali)-[~] └─$ ldd /usr/bin/tmux linux-vdso.so.1 (0x00007ffe5a3a1000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f8c4b1a0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8c4af00000)
libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f8c4ae70000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8c4b1c0000)

توضیح: این خروجی نشان می‌دهد که tmux به کدام کتابخانه‌ها نیاز دارد.

• دستور objdump

اطلاعات دقیق‌تری از ساختار فایل ارائه می‌دهد.

┌──(ya3in㉿kali)-[~] └─$ objdump -h /usr/bin/tmux | head -20 /usr/bin/tmux: file format elf64-x86-64

Sections:
Idx Name Size VMA LMA File off Algn
0 .interp 0000002c 0000000000000318 0000000000000318 00000318 2**0
1 .note.gnu.build-id 00000024 0000000000000348 0000000000000348 00000348 2**2
2 .gnu.hash 0000001c 0000000000000370 0000000000000370 00000370 2**3
3 .dynsym 00000420 0000000000000390 0000000000000390 00000390 2**3
...

▍ تفاوت‌های کلیدی در ساختار

✅ جمع‌بندی تفاوت‌ها:
  • دبیان: از .deb استفاده می‌کند که یک آرشیو ar با سه فایل استاندارد است.
  • رد هت: از .rpm استفاده می‌کند که شامل هدر، امضا و آرشیو cpio است.
  • مدیر بسته: apt (دبیان) در مقابل dnf (رد هت).
  • مسیر کتابخانه‌های ۶۴ بیت: در دبیان /usr/lib/x86_64-linux-gnu/، در رد هت /usr/lib64/.
✅ تمرین پیشنهادی:
  • با file نوع چند فایل باینری مثل /bin/bash و /usr/bin/python3 را بررسی کنید.
  • با ldd وابستگی‌های کتابخانه‌ای یک برنامه را مشاهده کنید.
  • با dpkg -L در دبیان، لیست فایل‌های یک بسته را ببینید.
  • با rpm -ql در رد هت، لیست فایل‌های یک بسته را ببینید.